﻿#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	//int ch = 0;
//	//while(getchar())
//	//EOF;//end of file
//	//int ch = getchar();
//	//printf("%c\n", ch);
//	//putchar(ch);
//
//	/*int ch = 0;
//	while ((ch = getchar()) != EOF)
//	{
//		putchar(ch);
//	}*/
//
//	//举一个例子
//	//假设密码是一个字符串
//	char password[20] = { 0 };
//	printf("请输入密码：>");
//	scanf("%s", password);
//	int ch = 0;
//	while ((ch = getchar()) != '\n')
//	{
//		;
//	}
//	printf("请确认密码（Y/N）：>");
//	int ret = getchar();
//	if ('Y' == ret)
//	{
//		printf("Yes\n");
//	}
//	else
//	{
//		printf("No\n");
//
//		return 0;
//	}
//	printf("%s", password);
//}
// 
	//int main()
	//{
	//	char ch = '\0';
	//	while ((ch = getchar()) != EOF)
	//	{
	//		if (ch < '0' || ch > '9')
	//			continue;
	//		putchar(ch);
	//	}
	//	//只打印数字字符
	//	return 0;
	//}

	//for 循环

	//语法
	//for(表达式1; 表达式2; 表达式3)
	//循环语句;

	//表达式1
	//表达式1为初始化部分，用于初始化循环变量的。
	//表达式2
	//表达式2为条件判断部分，用于判断循环时候终止。
	//表达式3
	//表达式3为调整部分，用于循环条件的调整。

	//int main()
	//{
	//	int i = 1;//初始化
	//
	//	while (i <= 10)//判断
	//	{
	//		printf("%d ", i);
	//
	//		i++;//调整
	//	}
	//	return 0;
	//}

	//打印1~10

	//int main()
	//{
	//	int i = 0;
	//	for (i = 1; i <= 10; i++)
	//	{
	//		printf("%d ", i);
	//		printf("hehe\n");
	//	}
	//	return 0;
	//}

	//int main()
	//{
	//	int i = 0;
	//	for (i = 1; i <= 10; i++)
	//	{
	//		if (i == 5)
	//			break;
	//
	//		printf("%d ", i);//1 2 3 4
	//	}
	//	return 0;
	//}

	//int main()
	//{
	//	int i = 0;
	//	for (i = 1; i <= 10; i++)
	//	{
	//		if (i == 5)
	//			continue;      //for循环中continue跳过本次循环后边的代码，但是不会跳过调整语句
	//
	//		printf("%d ", i);//1 2 3 4 6 7 8 9 10
	//	}
	//	return 0;
	//}

	//int main()
	//{
	//	int i = 1;//初始化
	//
	//	while (i <= 10)//判断
	//	{
	//		if (5 == i)
	//			continue;         //while循环中continue跳过了本次循环后边的代码，也跳过了调整语句
	//		printf("%d ", i);
	//		i++;//调整
	//	}
	//	return 0;
	//}


	//for语句的循环控制变量
	//建议：
	//1. 不可在for 循环体内修改循环变量，防止 for 循环失去控制。
	//2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

	//int i = 0;
	////前闭后开的写法
	//for (i = 0; i < 10; i++)
	//{
	//}
	////两边都是闭区间
	//for (i = 0; i <= 9; i++)
	//{
	//}

	//int main()
	//{
	//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	//	//下标0~9
	//	int i = 0;
	//	for (i = 0; i < 10; i++)
	//	{
	//		printf("%d ", arr[i]);
	//	}
	//	return 0;
	//}

	//一些for循环的变种

	//int main()
	//{
	//	//for (;;)//for循环的判断部分省略意味着判断会恒成立
	//	//{
	//	//	printf("hehe\n");
	//	//}
	//
	//	//int i = 0;
	//	//int j = 0;
	//	////这里打印多少个hehe? - 9
	//	//for (i = 0; i < 3; i++)
	//	//{
	//	//	for (j = 0; j < 3; j++)
	//	//	{
	//	//		printf("hehe\n");
	//	//	}
	//	//}
	//
	//	//int i = 0;
	//	//int j = 0;
	//	////这里打印多少个hehe? - 3
	//	//for (; i < 3; i++)
	//	//{
	//	//	for (; j < 3; j++)         //第二轮循环是j没有重新赋值为0
	//	//	{
	//	//		printf("hehe\n");
	//	//	}
	//	//}
	//
	//
	//	return 0;
	//}

	//使用多个变量控制循环

	//int main()
	//{
	//	int x, y;
	//	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	//	{
	//		printf("hehe\n");
	//	}
	//	return 0;
	//}

	//笔试题
	//请问循环要循环多少次？

	//int main()
	//{
	//	int i = 0;
	//	int k = 0;
	//	for (i = 0, k = 0; k = 0; i++, k++)//0次，判断语句为赋值且赋值为0，直接判断为假，跳出循环
	//		k++;
	//	return 0;
	//}



	//do while 循环


	//do语句的语法：
	//do
	//循环语句;
	//while (表达式);


	//int main()
	//{
	//	int i = 1;
	//	do
	//	{
	//		printf("%d ", i);
	//		i++;
	//	} 
	//	while (i <= 10);
	//
	//	return 0;
	//}

	//int main()
	//{
	//	int i = 1;
	//	do
	//	{
	//		if (5 == i)
	//			break;
	//
	//		printf("%d ", i);  //  1 2 3 4
	//		i++;
	//	} while (i <= 10);
	//
	//	return 0;
	//}

	//int main()
	//{
	//	int i = 1;
	//	do
	//	{
	//		i++;
	//		if (5 == i)
	//			continue;
	//
	//		printf("%d ", i);  //  2 3 4 6 7 8 9 10 11
	//	} while (i <= 10);
	//
	//	return 0;
	//}

	//int main()
	//{
	//	int i = 1;
	//	do
	//	{
	//		if (5 == i)
	//			continue;
	//
	//		printf("%d ", i);  // 1 2 3 4 死循环
	//		i++;
	//	} while (i <= 10);
	//
	//	return 0;
	//}


	//练习

	//计算n的阶乘
	//1*2*3*.....*n

	//int main()
	//{
	//	int i = 1;
	//	int n = 0;
	//	int ret = 1;
	//	scanf("%d", &n);
	//	for (i = 1; i <= n; i++)
	//	{
	//		ret = ret * i;
	//	}
	//	printf("%d\n", ret);
	//
	//	return 0;
	//}

	//计算 1!+2!+3!+……+10!

	//int main()
	//{
	//	int i = 1;
	//	int ret = 1;
	//	int n = 1;
	//	int sum = 0;
	//	for (i = 1; i <= 10; i++)
	//	{
	//		for (n = 1,ret = 1; n <= i; n++)
	//		{
	//			ret = ret * n;
	//		}
	//		sum = sum + ret;
	//	}
	//	printf("%d\n", sum);//4037913
	//
	//	return 0;
	//}                          //自己写的，正确

	//优化

	//int main()
	//{
	//	int n = 1;
	//	int ret = 1;
	//	int sum = 0;
	//	for (n = 1; n <= 10; n++)
	//	{
	//		ret = ret * n;
	//		sum = sum + ret;
	//	}
	//	printf("%d\n", sum);
	//	return 0;
	//}
	//1
	//1*2
	//1*2*3
	//1*2*3*4
	//......

	// 在一个有序数组中查找具体的某个数字n。（讲解二分查找）

	//int main()
	//{
	//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//	int k = 7;
	//	int i = 0;
	//	int sz = sizeof(arr) / sizeof(arr[0]);
	//	for (i = 0; i < sz; i++)
	//	{
	//		if (arr[i] == k)
	//		{
	//			printf("找到了，下标是：%d\n", i);
	//			break;
	//		}
	//	}
	//	if (i == sz)
	//	{
	//		printf("找不到\n");
	//	}
	//
	//	return 0;
	//}                            //遍历算法

	//还可以使用折半查找算法，效率更高
	//明天学